
		PUNSSi (C) 1995,1997 by Eero Tamminen



INTRODUCTION

PUNSSi is a small arcade game that I made as the idea seemed
interesting.  PUNSSi works on ST hi-rez on all Atari computers and is
intended for two players.  Game doesn't need GEM's presence to work.
It's also MiNT compatible.


THE OBLIGATORY STORY

You are in the role of the new information fetching 'agents' (ie.
software filters) that roam the InterNet.  Your mission is to guide the
found information (represented as a ball) to your host computer and to
avoid the (Intel/Micro$oft sales) droids which try to confuse you with
mis-information.  Getting contaminated by mis-information kills you and
reverts you to where you started.


GAME IDEA

The game idea is to score points by pushing (bouncing) the ball to your
home area on the opposite side of the screen and to avoid the droids
that tail you and your opponent.  When you'll chrash into a droid,
you'll start again from your starting place, the droid that chrashed
into you disappears and the other droid splits a new droid.  Ball
returns to it's starting place after it has been pushed into the 'goal'.


CONTROLS

Players control their `agents' either with a joystick or keyboard.
Thrusting joystick to some directions gives the `agent' a `push'
into that direction.

Keys corresponding to joystick directions are (they can be configured in
the keycodes.c file):

	Player-0	Player-1

	  Q W R		  7 8 9		The middle key acts like
	    |		    |		the joystick fire button
	A - S - D  	4 - 5 - 6	ie. you can start the
	    |		    |		game with it.
	  Z X C		  1 2 3

Player 0 `fire' button starts a duel and player 1 button a single
player practice mode.

When using keyboard for player-0, you should disconnect mouse so that
Punssi doesn't interpret mouse position as joystick one.  Alternatively
you could use test.tos to put mouse to a position where test.tos program
will report value 0 (and avoid moving the mouse while playing).

It would be better if both or neither of players would have joystick
because it's so much better to use than keyboard...


STARTING

Press button 0 for two player mode and button 1 for one player practice
mode.  Game can be quit at any time by pressing ESC or UNDO.


TACTICS

At the beginning avoid bouncing from the walls as it easily bounces you
against the droid tailing you (though it's handy when you'll play the
game more).

If the ball is near the (dear) opponents 'goal', move it toward's his
starting place so that when he dies, he will be put there and therefore
his disorientation could get him into droids again (which you brought
there by following the ball).

You could bounce your opponent into a droid althoug this might result in
dirty language (angry opponents play worse ;-).  Be careful yourself
though!

Btw. The ball moves faster diagonally (max. speed checking is faster
that way and it's not as prone for fixed point rounding errors).


SCORING

At the start of the game both player have nine lives.  Game will end
when either of the players runs out of lives.

Getting ball into your goal gives you 300 points.

Opponent chrashing into a droid gives you 100 points.

At the end you'll get 100 points from every live that you still got
left.


COPYRIGHT

This game is copyright of Eero Tamminen.  It comes with the source on
GPL (see GNU Licence) terms.  If you like the game, use the source or
otherwise feel like it, please send me a postcard to an address given
below.  If you want to send money, feel free to do that too...

You are allowed to distribute this game free of charge and providing
that all the accompanied files (punssi.c, punssi.h, keycodes.c, device.h
joyisr.s, joyisrz.s, test.c dosound.h, makefile, punssi.mak, punssi.tos,
test.tos, bg.dat, objects.dat, font.dat and punssi.txt (this file)) are
present.

Source can be used on other programs on condition that you'll include my
(and optionally your) source with them (standard GPL condition).  I
would be interested about a port onto another platform!  :-)


WARRANTY

As you can guess, this programs comes with NO WARRANTY.  If it ruins you
disk, computer, life or whatever, you're on your own.  I provide this
program in hope that it works as described above, but can't garantee it.
For starting programmer's this might be an example on how to program
planar graphics (in this case one plane), but again, no garantees of
correctness...


IMAGES

If you wish, you can change the monochrome bitmaps for your own use.
bg.dat is a 640x400 background image and objects.dat, a 640x128 bitmap,
contains images for the five game objects with presifting.


TECHNICAL INFO

Earlier I replaced only the joystick vector, which was a quite sociable
change.  But most people don't have two joysticks (me neither), so a
keyboard hack was needed.  Because you normally can't get several keys
at the time, I had to make a complete replacement for the system
keyboard handler.  This means that CTRL-C, virtual screen change, print
screen etc. won't work until you quit the game.  Game can be quit with
the ESC or UNDO key.

Another thing to note is that this program doesn't call the default
keyboard handler so no programs, even low level stuff, are aware of the
IKBD events.  If you have a screen saver running, I'd advice to suspend
it while playing.  As Punssi hogs all the key/joy input, screen saver
will most likely start in the middle of the game.  Besides slowing down
things a lot, it might also change the screen address.  Two programs
doing that at the same time is _not_ a good idea...

If you're running this on a Atari emulator, it might not implement IKBD
fully.  On that case use the earlier plain joystick vector handler (use
stuff at the bottom of the joyisr.s file and replace `ikbdsys' in
punssi.c with `joyvec') and recompile.

Game doesn't disable interrupts nor run in supervisor mode so it
shouldn't disturb background processes too much under MiNT.


BACKROUND

Except for the IKBD packet handler, the game is done completely in C.
As there are only five small objects moving, C suffices very well.
SozobonX C, GNU C (v2.3.3 and v2.5.8) and ME v3.5 editor were using for
programming this under MiNT v.1.12.x.  Programming of PUNSSi v1 took
about a week, approximately eight hours a day (including testing :)),
but I had previously done some code that I could use on this project.


THANKS TO

My previous roommates for testing this program (as they play more, they
beat me badly on this...).  WARNING!  this game really strains your
joystick(s)!

Jarkko Kniivil"a on helping me when I started C. And being a hardcore
portable and (especially) modular code design fanatic.

J"urgen Lock for arguing with me by E-mail about the relative merits
C versus GFA Basic on 1994 when I was still using Gfa...

Johan Klockars for programming the wonderful Mgif image manipulation
program (also free).

Warwick Allison for doing all that free C++ stuff and porting programs
for GEM.


	16th of July in 1997

	Eero Tamminen		E-mail: t150315@cc.tut.fi
	Sahantie 8		WWW: http://modeemi.cs.tut.fi/~puujalka/
	23600 Kalanti
	FINLAND


CHANGES

19.5.1995, PUNSSi v1.1.  Added one player practice mode that will be
activated when the fire button of the joystick 1 is pressed.
Two player game starts only when the fire button of the joystick 0
(the one in the mouse port) is pressed.

10.9.1995, PUNSSi v1.11.  Under MiNT quits and restores vectors when
catching a signal.

16.7.1997, PUNSSi v1.2.  The game uses now it's own keyboard handler so
that either of the players or both can use keyboard instead of a
joystick.  Because I don't have SozobonX C anymore (disk chrash...), I
was unable to certify that modifications work with it.  If they don't,
fix sources and send me the diffs!
